--1、接收传参
--优惠券id
local voucherId=ARGV[1];
--用户id
local userId=ARGV[2];
--订单id
local orderId=ARGV[3];

--2、封装key
local stockKey="seckill:stock:"..voucherId;
local orderKey="seckill:order:"..voucherId;

--3、脚本需要执行的核心业务
--判断是否还有库存
--tonumber 是 Lua 语言中的一个内置函数，用于将一个值转换为数字类型
if(tonumber(redis.call("get",stockKey))<=0) then
--    库存不足 返回1
    return 1
end

--判断用户是否是重复购买
if (redis.call("sismember",orderKey,userId)==1) then
--    存在，就是已经买过一次了，返回2
    return 2
end

--库存既充足又没有购买过
--减少一个库存，并将当前用户id存入
redis.call("incrby",stockKey,-1);
redis.call("sadd",orderKey,userId);
-- 发送消息到队列中， XADD stream.orders * k1 v1 k2 v2 ...
--向名为 stream.orders 的流中添加一条包含用户 ID、优惠券 ID 和订单 ID 的消息，Redis 会自动为这条消息生成一个唯一 ID
redis.call('xadd', 'stream.orders', '*', 'userId', userId, 'voucherId', voucherId,'id',orderId)
--只有真正可以下单，才可以返回0
return 0


